package cn.hfjava.kz.entity.dto;

import cn.hfjava.kz.common.UpdateGroup;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.PastOrPresent;

import java.io.Serializable;
import java.time.LocalDate;

/**
 * 数据传输对象：个人申报审核表
 */
@Getter
@Setter
@NoArgsConstructor
public class ApplicationFormDTO implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    @NotNull(groups = UpdateGroup.class, message = "Id不能为空")
    private Integer id;

    /**
     * 考生id
     */
    @NotNull(message = "考生Id不能为空")
    @Schema(name="studentId", example = "8")
    private Integer studentId;

    /**
     * 性别
     */
    @NotBlank(message = "性别不能为空")
    @Schema(name="gender", example = "男")
    private String gender;

    /**
     * 出生日期，以 YYYY-MM 格式存储
     */
    @PastOrPresent(message = "出生日期必须为过去或现在")
    @Schema(name="birthdate", example = "1990-01")
    private LocalDate birthdate;

    /**
     * 户籍所在地
     */
    @NotBlank(message = "户籍所在地不能为空")
    @Schema(name="domicile", example = "北京市")
    private String domicile;

    /**
     * 毕业院校
     */
    @NotBlank(message = "毕业院校不能为空")
    @Schema(name="gradSchool", example = "北京大学")
    private String gradSchool;

    /**
     * 所学专业
     */
    @NotBlank(message = "所学专业不能为空")
    @Schema(name="major", example = "计算机科学与技术")
    private String major;

    /**
     * 毕业证编号
     */
    @NotBlank(message = "毕业证编号不能为空")
    @Schema(name="dipNum", example = "123456789")
    private String dipNum;

    /**
     * 毕业时间
     */
    @PastOrPresent(message = "毕业时间必须为过去或现在")
    @Schema(name="gradDate", example = "2023-01")
    private LocalDate gradDate;

    /**
     * 申报工种
     */
    @NotBlank(message = "申报工种不能为空")
    @Schema(name="aplPot", example = "计算机")
    private String aplPot;

    /**
     * 申报等级
     */
    @NotBlank(message = "申报等级不能为空")
    @Schema(name="aplLevel", example = "初级")
    private String aplLevel;

    /**
     * 已取得本职业或相关职业及等级
     */
    @Schema(name="prvCtf", example = "计算机初级")
    private String prvCtf;

    /**
     * 证书编号
     */
    @Schema(name="ctfNum", example = "123456789")
    private String ctfNum;

    /**
     * 参保（或就业、学习）所在市
     */
    @Schema(name="insCity", example = "北京市")
    private String insCity;

    /**
     * 参加评价批次号
     */
    @Schema(name="evaBatch", example = "2023-01")
    private String evaBatch;

    /**
     * 参加评价地点
     */
    @Schema(name="evaLocation", example = "北京市")
    private String evaLocation;

    /**
     * 个人事项承诺
     */
    @Schema(name="prmsState", example = "同意")
    private String prmsState;

    /**
     * 承诺人签字
     */
    private String sigName;

    /**
     * 签字日期
     */
    private LocalDate signDate;

    /**
     * 单位审核意见
     */
    private String emplOp;

    /**
     * 审核意见日期
     */
    private LocalDate emplDate;

    /**
     * 申请人签名
     */
    private String aplSign;

    /**
     * 申请日期
     */
    private LocalDate aplDate;

    /**
     * 认定机构审核意见
     */
    private String insOp;

    /**
     * 审核人
     */
    private String revName;

    /**
     * 审核日期
     */
    private LocalDate revDate;

}
